package com.example.baiguangsystem.mapper;

import com.example.baiguangsystem.entity.Paging;
import com.example.baiguangsystem.entity.User;
import org.apache.ibatis.annotations.*;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * 用户dao接口
 *
 * @Author: 27641
 * @ProjectName: BaiGuangSystem
 * @Date: 2022/02/02/22:56
 * @noinspection SpellCheckingInspection
 */
@Mapper
public interface UserMapper {

    /**
     * 用户登录业务
     *
     * @param user 前端输入的需要登录的用户信息包装
     * @return boolean 如果登录成功返回true，否则返回false
     */
    public User login(@Param("user") User user);

    /**
     * 新增用户业务功能
     *
     * @param user 需要新增用户信息封装
     * @return 如果返回true则表示新增成功，否则表示失败
     */
    public boolean addNewUser(@Param("user") User user);

    /**
     * 根据用户Id查看用户信息
     *
     * @param userId 需要查看的用户Id
     * @return 查看到的结果
     */
    public User selectUserMessagesById(@Param("userId") int userId);

    /**
     * 查找所有用户信息(只有超级用户才可以使用)
     *
     * @return 所有用户信息
     */
    @Select("select * from user")
    @Results({
            @Result(property = "userId", column = "user_id"),
            @Result(property = "userName", column = "user_name"),
            @Result(property = "userPassword", column = "user_password"),
            @Result(property = "isAdminstrator", column = "isadministrator")
    })
    public List<User> findUserAll();


    /**
     * 查询用户表之中的数量
     *
     * @return 用户表之中的数量
     */
    @Select("select count(*) from user")
    public Integer findAllUserNumber();

    /**
     * 查询所有用户信息（root）（分页查询实现）
     *
     * @param paging 分页要求信息封装
     * @return 查询结果
     */
    @Select("select * from user limit #{paging.startPage},#{paging.eventPageNumber}")
    @Results({
            @Result(property = "userId", column = "user_id"),
            @Result(property = "userName", column = "user_name"),
            @Result(property = "userPassword", column = "user_password"),
            @Result(property = "isAdminstrator", column = "isadministrator")
    })
    public List<User> findUserAllByLimit(@Param("paging") Paging paging);
}
